﻿@using System.Diagnostics;
@using System.Collections;
@using System.Reflection;
@using System.Runtime;
@using System.Runtime.Versioning;
@using NewLife.Common;
@using NewLife.Cube;
@using NewLife.Web;
@{
    Layout = NewLife.Cube.Setting.Current.Layout;

    ViewBag.Title = "服务器信息";

    var asm = Assembly.GetExecutingAssembly();
    var att = asm.GetCustomAttribute<TargetFrameworkAttribute>();
    var ver = att.FrameworkDisplayName ?? att.FrameworkName;
    var req = HttpContext.Current.Request;
    var httpContext = req.RequestContext.HttpContext;

    var mi = MachineInfo.Current ?? new MachineInfo();

    // GC设置
    //var gc = "IsServerGC={0},LatencyMode={1}".F(GCSettings.IsServerGC, GCSettings.LatencyMode);
}
<div class="table-responsive">
    <table class="table table-bordered table-hover table-striped table-condensed">
        <thead>
            <tr>
                <th colspan="4">
                    服务器信息
                </th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="name">
                    应用系统：
                </td>
                <td class="value">
                    @HttpRuntime.AppDomainAppVirtualPath&nbsp;
                    @if (this.Has((PermissionFlags)16))
                    {
                        <a href="@Url.Action("Restart")" onclick="return confirm('仅重启ASP.Net应用程序域，而不是操作系统！\n确认重启？')">重启应用系统</a>
                    }
                    &nbsp;&nbsp;&nbsp;&nbsp;@req.GetRawUrl()
                </td>
                <td class="name">
                    目录：
                </td>
                <td class="value">
                    @HttpRuntime.AppDomainAppPath
                </td>
            </tr>
            <tr>
                <td class="name">
                    域名地址：
                </td>
                <td class="value">
                    <span title="SERVER_NAME">@Request.ServerVariables["SERVER_NAME"]</span>，
                    <span title="LOCAl_ADDR">@Request.ServerVariables["LOCAl_ADDR"]:@Request.ServerVariables["Server_Port"]</span>
                    &nbsp;<span title="REMOTE_HOST">[@Request.ServerVariables["REMOTE_HOST"]]</span>
                    &nbsp;<span title="真实">[@httpContext.GetUserHost()]</span>
                    <a href="@Url.Action("Main/ServerVar")" target="_blank" title="点击打开服务器变量列表">服务器变量列表</a>
                </td>
                <td class="name">
                    计算机用户：
                </td>
                <td class="value" title="@mi.UUID">
                    @mi.Product，
                    @Environment.UserName/@Environment.MachineName
                </td>
            </tr>
            <tr>
                <td class="name">
                    应用程序域：
                </td>
                <td class="value">
                    @AppDomain.CurrentDomain.FriendlyName
                    <a href="@Url.Action("Main/Assembly")" target="_blank" title="点击打开进程程序集列表">程序集列表</a>
                </td>
                <td class="name">
                    .Net 版本：
                </td>
                <td class="value">
                    @Environment.Version &nbsp;@ver
                </td>
            </tr>
            <tr>
                <td class="name">
                    操作系统：
                </td>
                <td class="value" title="@mi.Guid">
                    @mi.OSName @mi.OSVersion
                </td>
                <td class="name">
                    Web服务器：
                </td>
                <td class="value">
                    @ViewBag.WebServerName
                </td>
            </tr>
            <tr>
                <td class="name">
                    处理器：
                </td>
                <td class="value" title="@mi.CpuID">
                    @mi.Processor，
                    @Environment.ProcessorCount
                    核心，@mi.CpuRate.ToString("p0")
                    @if (mi.Temperature > 0)
                    {
                        <span>，@mi.Temperature ℃</span>
                    }
                </td>
                <td class="name">
                    时间：
                </td>
                <td class="value" title="这里使用了服务器默认的时间格式！后面是开机时间。">
                    @DateTimeOffset.Now，开机@(new TimeSpan(0, 0, 0, 0, Environment.TickCount))，@mi.Temperature ℃
                </td>
            </tr>
            <tr>
                @{ var process = Process.GetCurrentProcess();}
                <td class="name">
                    内存：
                </td>
                <td class="value">
                    物理：@((mi.AvailableMemory / 1024 / 1024).ToString("n0"))M / @((mi.Memory / 1024 / 1024).ToString("n0"))M，
                    工作/提交: @((process.WorkingSet64 / 1024 / 1024).ToString("n0"))M/@((process.PrivateMemorySize64 / 1024 / 1024).ToString("n0"))M
                    <br />
                    GC: @((GC.GetTotalMemory(false) / 1024 / 1024).ToString("n0"))M，
                    <a href="@Url.Action("Main/ProcessModules")" target="_blank" title="点击打开进程模块列表">模块列表</a>
                    <a href="@Url.Action("MemoryFree")" title="点击释放进程内存">释放内存</a>
                </td>
                <td class="name">
                    进程时间：
                </td>
                <td class="value">
                    @process.TotalProcessorTime.TotalSeconds.ToString("N2")秒 启动于 @process.StartTime.ToFullString()
                </td>
            </tr>
            <tr>
                <td class="name">
                    Session：
                </td>
                <td class="value">
                    @Session.Contents.Count 个，@Session.Timeout 分钟，SessionID：@Session.Contents.SessionID
                    <a href="@Url.Action("Main/Session")" target="_blank" title="点击打开Session列表">Session列表</a>
                </td>
                <td class="name">
                    Cache：
                </td>
                <td class="value">
                    @Cache.Count 个，可用：@((Cache.EffectivePrivateBytesLimit / 1024).ToString("n0"))KB
                    <a href="@Url.Action("Main/Cache")" target="_blank" title="点击打开Cache列表">Cache列表</a>
                </td>
            </tr>
        </tbody>
    </table>
    <table class="table table-bordered table-hover table-striped table-condensed">
        <thead>
            <tr>
                <th>名称</th>
                <th>标题</th>
                <th>文件版本</th>
                <th>内部版本</th>
                <th>编译时间</th>
                <th>描述</th>
            </tr>
        </thead>
        <tbody>
            @foreach (AssemblyX item in ViewBag.MyAsms)
            {
                <tr>
                    <td>@item.Name</td>
                    <td>@item.Title</td>
                    <td>@item.FileVersion</td>
                    <td>@item.Version</td>
                    <td>@(item.Compile.Year <= 2000 ? "" : item.Compile.ToFullString())</td>
                    <td>@item.Description</td>
                </tr>
            }
        </tbody>
    </table>
</div>